// 文件名：flat_map_sensors_embedded.cpp
// 目的：在嵌入式/性能敏感场景中，使用 std::flat_map 存储传感器校准参数，按 ID 查找与顺序遍历。
// 背景：
//   - flat_map 采用“有序向量 + 二分查找”的结构，查找 O(log N)、遍历/缓存友好（连续内存），
//     插入/删除为 O(N) 移动代价，适合“读多写少”的配置/字典类场景（嵌入式常见）。
// 要点：
//   - reserve(8)：预留容量减少重分配与元素移动，提升插入阶段性能；
//   - emplace(k, v)：原位构造键值对；
//   - find(id)：O(log N) 查找；
//   - 顺序遍历天然按 key 升序；
//   - iomanip 控制浮点输出精度。
// 注意：
//   - #include <flat_map> 需要对应实现支持（C++23 标准库或供应商扩展；旧编译器可用 Boost.Container 的 flat_map 替代）。
//   - 若频繁增删，考虑 std::map/unordered_map；若重视遍历吞吐与内存局部性，flat_map 更有优势。

#include <flat_map>
#include <iomanip>
#include <iostream>
#include <string>

struct Calibration {
    double offset;
    double scale;
};

int main() {
    std::flat_map<int, Calibration> sensors;
    sensors.reserve(8); // 减少重分配，提升嵌入式缓存效率

    // 插入若干传感器的校准参数（ID -> {offset, scale}）
    sensors.emplace(101, Calibration{0.12, 1.01});
    sensors.emplace(42,  Calibration{-0.05, 0.99});
    sensors.emplace(7,   Calibration{0.00, 1.00});
    sensors.emplace(88,  Calibration{0.20, 1.05});

    // 查询并打印指定 ID 的校准
    auto show = [&](int id) {
        auto it = sensors.find(id);
        if (it == sensors.end()) {
            std::cout << "Sensor " << id << " not calibrated.\n";
        } else {
            std::cout << "Sensor " << id << ": offset="
                      << std::fixed << std::setprecision(2) << it->second.offset
                      << ", scale=" << it->second.scale << '\n';
        }
    };

    show(42);
    show(88);
    show(13);

    // 以升序 ID 遍历所有传感器
    std::cout << "All sensors in ascending ID order:\n";
    for (const auto& [id, cal] : sensors) {
        std::cout << "  #" << id << " -> offset=" << cal.offset
                  << ", scale=" << cal.scale << '\n';
    }

    return 0;
}